home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / stv.lha / STV / st_v / util / STVUTIL5.ZIP / PROCES.ST < prev    next >
Text File  |  1993-02-07  |  2KB  |  45 lines

  1. "This replaces the schedule method for ProcessScheduler.
  2.  The only change is the addition of one line at the end
  3.  of the method, for the idle loop.  With this change, you
  4.  will be able to control-break out of alot of situations
  5.  that used to hang V up tighter than a drum.  This will also
  6.  keep windows alive and kicking.
  7.  The #readWinQueue method in NotificationManager is the method
  8.  that retrieves messages from the application queue and then
  9.  dispatches them.  You must call this method in the idle loop,
  10.  or no messages get dispatched.  Thus a lock-up of windows,
  11.  or, at the very least, a lockup of smalltalk.
  12.  Since V/Win has no callback mechanism, you have to use windows
  13.  messages to communicate events to Smalltalk.  If you are blocking
  14.  on an event to be received (ie, a callback from a device
  15.  driver), you could possibly lockup the machine and never get 
  16.  the event.  This fix solves this problem and allows you to
  17.  use the messages to signal semaphores and such from an ISR.
  18.  -Hal" !
  19.  
  20. ! ProcessScheduler methods !
  21.  
  22. schedule
  23.  
  24.     | index processes process |
  25.     index := readyProcesses size.
  26.     [index < 1]
  27.         whileFalse: [
  28.             (processes := readyProcesses at: index) isEmpty
  29.                 ifFalse: [
  30.                     process := processes removeFirst.
  31.                     process resume].
  32.             index := index - 1].
  33.     "No process is ready to run (i.e. we lost the idle process)
  34.      so create a new idle process."
  35.     CurrentProcess := Process new.
  36.     CurrentProcess priority: 1.
  37.     Process dropSenderChain.
  38.     Process enableInterrupts: true.
  39.     [true] whileTrue: [
  40.         UserLibrary waitMessage.    "Block waiting for a message from windows"
  41.         KeyboardSemaphore signal.  "Bump the system"
  42.         "** Added by HSH **"
  43.         Notifier readWinQueue.         "Dispatch the message - HSH"
  44.     ].! !
  45.